package com.tianji.learning.config;

import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
import com.tianji.learning.utils.TableInfoContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * MybatisPlus配置类
 * 动态表名配置
 */

@Configuration
public class MybatisConfiguration {

    @Bean
    public DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor() {
        // 准备一个Map，用于存储TableNameHandler
        Map<String, TableNameHandler> map = new HashMap<>(1);
        // 存入一个TableNameHandler，用来替换points_board表名称
        // 替换方式，就是从TableInfoContext中读取保存好的动态表名
        // 每次从TableInfoContext中读取的时候，都是从当前线程中读取
        // 这样就可以保证每个线程都有自己的动态表名，并且都是一样的
        // 判断是不是null不是为了防止空指针，而是为了防止在其他项目中使用这个配置类的时候，因为没有TableInfoContext，而导致报错
        map.put("points_board", (sql, tableName) -> TableInfoContext.getInfo() == null ? "points_board" : TableInfoContext.getInfo());
        return new DynamicTableNameInnerInterceptor(map);
    }
}